import axios from 'axios'
import {Message, Loading} from 'element-ui'
// import {Message} from 'element-ui'

import router from '@/router/index'

let loadingInstance = null
let loadCount = 0
// 请求拦截器
axios.interceptors.request.use(
  config => {
    // 带上token
    var tokens = window.localStorage.getItem('token')
    if (tokens) {
      config.headers['X-Token'] = tokens
    }

    // 如果是get请求，带上时间戳
    if (config.method === 'get') {
      config.params = {
        _t: Date.parse(new Date()) / 1000,
        ...config.params
      }
    }

    // 推送消息轮询的时候不需要loading，做下处理
    if (config.headers._load !== false) {
      if (!loadCount) loadingInstance = Loading.service({ fullscreen: true, background: 'rgba(0, 0, 0, 0)' }) // 全局loading启动
      loadCount++
    }

    // 请求url调整
    if (process.env.NODE_ENV === 'production') {
      config.url = window.location.pathname.match(/\/[\w\d]+\//)[0].slice(0, -1) + config.url// 生产环境补上应用名
    } else if (process.env.NODE_ENV === 'development') {
      config.url = '/crm' + config.url // 注意：修改要同步修改proxytable！
    }
    return config
  },
  error => {
    console.log(error)
  }
)

// 响应拦截器
axios.interceptors.response.use(
  res => {
    if (res.config.headers._load !== false) loadCount--
    if (!loadCount) loadingInstance.close()
    // 弹窗提示错误信息
    if (res.data.meta && !res.data.meta.success) {
      Message.error(res.data.meta.message)
      if (res.data.meta.errorType === 'LOGIN') { // 检验是否未登录
        localStorage.clear()
        sessionStorage.clear()
        router.push('/login')
      }
    }
    return res
  },
  error => {
    let res = error.response
    if (res.config.headers._load !== false) loadCount--
    if (!loadCount) loadingInstance.close()
    if (res.data.meta && !res.data.meta.success) {
      Message.error(res.data.meta.message)
    }
    return Promise.reject(error)
  }
)
